
package org.asportoonline.integration;

import java.util.List;
import javax.ejb.Local;
import org.asportoonline.entities.Cliente;
import org.asportoonline.entities.Prenotazione;
import org.asportoonline.entities.ProdottoPrenotato;

/**
 * Interfaccia contenente le intestazioni dei metodi da sviluppare per interfacciarsi all'entità
 * persistente ProdottoPrenotato.
 * 
 * @author fe
 * @see ProdottoPrenotatoFacadeImplementation
 */
@Local
public interface ProdottoPrenotatoFacade {

    /**
     * Inserisce un nuovo ProdottoPrenotato.
     * 
     * @param prodottoPrenotato 
     * @see ProdottoPrenotato
     */
    void create(ProdottoPrenotato prodottoPrenotato);

    /**
     * Modifica un ProdottoPrenotato esistente.
     * 
     * @param prodottoPrenotato 
     * @see ProdottoPrenotato
     */
    void edit(ProdottoPrenotato prodottoPrenotato);

    /**
     * Rimuove un ProdottoPrenotato.
     * 
     * @param prodottoPrenotato 
     * @see ProdottoPrenotato
     */
    void remove(ProdottoPrenotato prodottoPrenotato);

    /**
     * Cerca un ProdottoPrenotato in base all'ID.
     * 
     * @param id ID del ProdottoPrenotato.
     * @return se l'ID esiste restituisce il ProdottoPrenotato, altrimenti restituisce null.
     * @see ProdottoPrenotato
     */
    ProdottoPrenotato find(Object id);

    /**
     * Cerca tutti i ProdottiPrenotati presenti nel database.
     * 
     * @return restituisce una lista contenente tutti i ProdottiPrenotati presenti nel database; 
     * se non ce ne sono restituisce null.
     * @see ProdottoPrenotato
     */
    List<ProdottoPrenotato> findAll();


    /**
     * Cerca tutti i ProdottiPrenotati di una certa prenotazione
     * 
     * @param prenotazione prenotazioni di cui si vogliono ottenere tutti i ProdottiPrenotati
     * @return una lista contenente tutti i ProdottiPrenotati della Prenotazione prenotazione
     * @see ProdottoPrenotato
     */
    List<ProdottoPrenotato> fetchPrenotationProducts(Prenotazione prenotazione);
    
}
